/**********************************************************************************************************
** 程序文件：	MD5.h
** 程序版本：	2.0
** 开发环境：	RealView MDK-ARM 5.17
** 作者:		盖书永
** 生成日期:	2015年12月6日16:08:42
** 文件功能：	md5（信息-摘要算法）是一种不可逆的加密算法

MD5算法具有以下特点：
1、压缩性：任意长度的数据，算出的MD5值长度都是固定的。
2、容易计算：从原数据计算出MD5值很容易。
3、抗修改性：对原数据进行任何改动，哪怕只修改1个字节，所得到的MD5值都有很大区别。
4、强抗碰撞：已知原数据和其MD5值，想找到一个具有相同MD5值的数据（即伪造数据）是非常困难的。
**********************************************************************************************************/
#ifndef MD5_H
#define MD5_H
 
typedef struct
{
	unsigned int 	count[2];
	unsigned int 	state[4];
	unsigned char 	buffer[64];   
}MD5_CTX;			//MD5上下文结构体对象
                                         
/**********************************************************************************************************
* 函数名称： void MD5_Init(MD5_CTX *ctx)
* 函数说明： MD5初始化
* 输入参数： 结构体指针
* 返回参数： 无
**********************************************************************************************************/
void MD5_Init(MD5_CTX *ctx);

/**********************************************************************************************************
* 函数名称： void MD5_Update(MD5_CTX *ctx,unsigned char *input,unsigned int inputlen)
* 函数说明： 数据进行MD5处理
* 输入参数： 结构体指针，输入数据缓存指针，输入数据长度
* 返回参数： 无
**********************************************************************************************************/
void MD5_Update(MD5_CTX *ctx, unsigned char *input, unsigned int inputlen);

/**********************************************************************************************************
* 函数名称： void MD5_Final(MD5_CTX *ctx,unsigned char *digest)
* 函数说明： MD5 输出结果，最后调用
* 输入参数： 结构体指针，MD5摘要值（需要16字节缓存区进行值得缓存）
* 返回参数： 无
**********************************************************************************************************/
void MD5_Final(MD5_CTX *ctx,unsigned char *digest);

/**********************************************************************************************************
* 函数名称： void MD5_Update(MD5_CTX *ctx,unsigned char *input,unsigned int inputlen)
* 函数说明： 数据进行MD5信息摘要处理，（适用于固定数据块进行信息摘要）
* 输入参数： 输入数据缓存指针，输入数据长度，MD5摘要值（需要16字节缓存区进行值得缓存）
* 返回参数： 无
**********************************************************************************************************/
void MD5_Digest(unsigned char *input,unsigned int inputlen,unsigned char *digest);
 
#endif
